import { defineConfig, loadEnv } from 'vite'
import { createVuePlugin } from 'vite-plugin-vue2'
import { createHtmlPlugin } from 'vite-plugin-html'
import { resolve } from 'path'

const serverAddress = 'http://192.168.5.13' // 本地
// const serverAddress = 'http://172.25.254.189' // 生产

export default defineConfig(({ mode }) => {
  const env = loadEnv(mode, process.cwd())
  console.log('env', env)
  const isProd = env.VITE_NODE_ENV == 'prod'
  return {
    plugins: [
      createVuePlugin(),
      createHtmlPlugin({
        inject: {
          data: {
            //获取标题变量
            title: env.VITE_PROJECT_TITLE,
          },
        },
      }),],
    server: {
      host: '0.0.0.0',
      cors: true, //为开发服务器配置 CORS , 默认启用并允许任何源
      open: false, //服务启动时自动在浏览器中打开应用
      port: 8765,
      strictPort: false, //设为true时端口被占用则直接退出，不会尝试下一个可用端口
      hmr: true, //禁用或配置 HMR 连接
      // 传递给 chockidar 的文件系统监视器选项
      watch: {
        ignored: ['!**/node_modules/your-package-name/**'],
      },
      proxy: {
        '/platform-gateway': {
          target: serverAddress,
          changeOrigin: true,
        },
      },
    },
    //解决“vite use `--host` to expose”
    publicDir: 'public',
    // base: './', //不加打包后白屏
    base: env.VITE_PROJECT_CONTEXT,
    //打包配置
    build: {
      //浏览器兼容性  "esnext"|"modules"
      target: 'modules',
      //指定输出路径
      outDir: isProd ? 'dist_production' : 'dist_test',
      //生成静态资源的存放路径
      assetsDir: 'public',
      //小于此阈值的导入或引用资源将内联为 base64 编码，以避免额外的 http 请求。设置为 0 可以完全禁用此项
      assetsInlineLimit: 4096,
      //启用/禁用 CSS 代码拆分
      cssCodeSplit: true,
      //构建后是否生成 source map 文件
      sourcemap: false,
      //自定义底层的 Rollup 打包配置
      rollupOptions: {},
      //@rollup/plugin-commonjs 插件的选项
      commonjsOptions: {},
      //构建的库
      // lib: {
      // },
      //当设置为 true，构建后将会生成 manifest.json 文件
      manifest: false,
      // 设置为 false 可以禁用最小化混淆，
      // 或是用来指定使用哪种混淆器
      // terser 构建后文件体积更小
      // boolean | 'terser' | 'esbuild'
      minify: 'terser',
      //传递给 Terser 的更多 minify 选项。
      terserOptions: {},
      //设置为 false 来禁用将构建后的文件写入磁盘
      write: true,
      //默认情况下，若 outDir 在 root 目录下，则 Vite 会在构建时清空该目录。
      emptyOutDir: true,
      //启用/禁用 brotli 压缩大小报告
      brotliSize: true,
      //chunk 大小警告的限制
      chunkSizeWarningLimit: 500,
    },
    ssr: {
      // 列出的是要为 SSR 强制外部化的依赖
      external: [],
      //列出的是防止被 SSR 外部化依赖项
      noExternal: [],
    },
    resolve: {
      //别名配置，引用src路径下的东西可以通过@如：import Layout from '@/layout/index.vue'
      alias: [
        {
          find: '@',
          replacement: resolve(__dirname, 'src'),
        },
      ],
    },
  }
})
